# 带有参数的装饰器: 装饰器只能带一个参数
# 使用带有参数的装饰器，其实是在装饰器外面又包裹了一个函数，使用该函数接收参数，返回装饰器

# 错误的语法
# def decorator(fn, flag):
#
#     def inner(num1, num2):
#         if flag == '+':
#             print('正在加法计算')
#         elif flag =='-':
#             print('正在减法计算')
#         result = fn(num1, num2)
#         return result
#
#     return inner


def logging(flag,flag2):
    print(flag,'----',flag2)
    def decorator(fn):

        def inner(num1, num2):
            if flag == '+':
                print('正在加法计算')
                result = fn(num1, num2)
            elif flag == '-':
                print('正在减法计算')
                result = fn(num1, num2)
            return result

        return inner

    return decorator


@logging('+','加法')  # '相当于先给flag赋值flag = '+' , 然后再装饰add, add = logging(add)
def add(a, b):
    result = a + b
    return result


@logging('-','减法')  # '相当于先给flag赋值flag = '-' , 然后再装饰sub, sub = logging(sub)
def sub(a, b):
    result = a - b
    return result


if __name__ == '__main__':
    # pass
    print('-----------准备开始执行--------------')
    result = add(10, 2)
    print('result-->', result)

    result = sub(10, 2)
    print('result-->', result)
